package thread;

/**
 * 同步块
 * 语法：
 *      synchronized(同步监视器对象）{
 *          需要多个线程同步执行的代码片段
 *      }
 */
public class SyncDemo2 {
    public static void main(String[] args) {
        shop shop = new shop();
        Thread t1 = new Thread("一号顾客"){
            public void run(){
                shop.buy();
            }
        };
        Thread t2 = new Thread("二号顾客"){
            public void run(){
                shop.buy();
            }
        };
        t1.start();
        t2.start();

    }
}
class shop{
    public  void buy(){
        try {
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+"正在挑衣服");
            Thread.sleep(5000);
            /**
             * 同步快使用时要指定同步监视器对象，该对象的选取要同时满足：
             * 1、必须时同一个引用类型实例
             * 2、多个需要同步执行该代码片段的线程看到该对象必须时同一个
             */
           synchronized (this) {
                System.out.println(t.getName() + "正在换衣服");
                Thread.sleep(5000);
           }
            System.out.println(t.getName()+"结账离开");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}
